
package ClasesDAO;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import Aplicaciones.Ciudad;
import Aplicaciones.IVA;
import Aplicaciones.Obtiene;
import Aplicaciones.Pais;
import Aplicaciones.Pasajero;
import Aplicaciones.Persona;
import Aplicaciones.TipoDoc;
import ClasesControladoras.ConexionBD;
import ClasesDTO.PasajeroCompletoDTO;
import ClasesDTO.PasajeroDTO;
import ClasesDTO.TipoDocDTO;
 

 
public class DAOPasajero {
    
   private static ConexionBD conexion = new ConexionBD();  
 
    //BUSCAR TIPOS DE DOCUMENTO EN LA BD 
	public Vector<TipoDoc> getTiposDoc() throws SQLException {
		ResultSet rs = conexion.getQuery("SELECT * from tipo_doc");
		Vector<TipoDoc> retorno = new Vector<TipoDoc>();
		
		while(rs.next()){
			TipoDoc tipoDoc = new TipoDoc(rs.getInt(1),rs.getString(2));
			retorno.add(tipoDoc);
		}
		
		return retorno;
	}
	
	//BUSCAR CONDICIONES FRENTE AL IVA EN LA BD
	public Vector<IVA> getIva() throws SQLException {
		ResultSet rs =  conexion.getQuery("SELECT * from cond_frente_iva");
		Vector<IVA> retorno = new Vector<IVA>();
		
		while(rs.next()){
			IVA iva = new IVA(rs.getInt(1),rs.getString(2));
			retorno.add(iva);
		}
		
		return retorno;
	}
	
	
	public void comparar (){
		
	}

	//---- CU02 ---- BUSCAR PASAJERO
	
	public static ArrayList<PasajeroDTO> buscarPasajeros (String apellido, String nombre, int tipoDoc, String numDoc) throws SQLException, ClassNotFoundException {
			
		ResultSet resultadoBusqueda;
		resultadoBusqueda=conexion.getQuery("SELECT nombre, apellido, id_tipo_doc, nro_doc FROM pasajero ORDER BY id_tipo_doc, apellido");
			
		ArrayList <PasajeroDTO> listaAux = new ArrayList <PasajeroDTO> ();
		while(resultadoBusqueda.next()){
	        PasajeroDTO pasajero = new PasajeroDTO();
	        pasajero.nombre = resultadoBusqueda.getString(1);
	        pasajero.apellido = resultadoBusqueda.getString(2);
	        pasajero.tipoDoc = resultadoBusqueda.getInt(3);
	        pasajero.nroDoc = resultadoBusqueda.getString(4);
	                
	        listaAux.add(pasajero);
	    }
			
		if (!apellido.isEmpty()){
			ArrayList <PasajeroDTO> listaApellido = new ArrayList <PasajeroDTO> ();
				
			for (int i=0; i<listaAux.size(); i++){
				if(listaAux.get(i).apellido.toLowerCase().startsWith(apellido)){
					PasajeroDTO pasajero = new PasajeroDTO();
					pasajero = listaAux.get(i);
					listaApellido.add(pasajero);
				}
			}
				
			listaAux = listaApellido;
		}
			
		if(!nombre.isEmpty()){
			ArrayList <PasajeroDTO> listaNombre = new ArrayList <PasajeroDTO> ();
		
			for (int i=0; i<listaAux.size(); i++){
				if(listaAux.get(i).nombre.toLowerCase().startsWith(nombre)){
					PasajeroDTO pasajero = new PasajeroDTO();
					pasajero = listaAux.get(i);
					listaNombre.add(pasajero);
				}
			}
				
			listaAux = listaNombre;
		}
			
		if(!(tipoDoc==0)){
			ArrayList <PasajeroDTO> listaTipoD = new ArrayList <PasajeroDTO> ();
				
			for (int i=0; i<listaAux.size(); i++){
				if(listaAux.get(i).tipoDoc == tipoDoc){
					PasajeroDTO pasajero = new PasajeroDTO();
					pasajero = listaAux.get(i);
					listaTipoD.add(pasajero);
				}
			}
				
			listaAux = listaTipoD;
		}
			
		if(!numDoc.isEmpty()){
			ArrayList <PasajeroDTO> listaNumDoc = new ArrayList <PasajeroDTO> ();
				
			for (int i=0; i<listaAux.size(); i++){
				if(listaAux.get(i).nroDoc.startsWith(numDoc)){
					PasajeroDTO pasajero = new PasajeroDTO();
					pasajero = listaAux.get(i);
					listaNumDoc.add(pasajero);
				}
			}
				
			listaAux = listaNumDoc;
		}
			
		return listaAux;
	}
	
		
	public static void agregarPasajero(PasajeroCompletoDTO pasajero) throws SQLException, ClassNotFoundException {
			
		String consultaPasajero = "INSERT INTO pasajero VALUES (null,"
				+ "'"+pasajero.getApellido()+"', '"+pasajero.getNombre()+"', '"+pasajero.getFechaNac()+"', '"+pasajero.getNroDoc()+"' , '"+pasajero.getTipoDoc()+"'";
		conexion.setQuery(consultaPasajero);	
			
		//String sentenciaEjecutar = ";";
	       //ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	}
	
	public static TipoDocDTO buscarIdTipo(String tipoDoc) throws SQLException, ClassNotFoundException {
			
	    String sentenciaEjecutar="SELECT * FROM tipo_doc WHERE tipo_doc = " + tipoDoc;
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	    if(resultadoBusqueda.next()){
			TipoDocDTO tipo = new TipoDocDTO ();
			tipo.idTipoDoc = resultadoBusqueda.getInt(1);
			tipo.tipoDoc = resultadoBusqueda.getString(2);
			return tipo;
		}  
	        
	    return null;
	        		
	}
	        	
	public static TipoDocDTO buscarTipo(int idTipo) throws SQLException {
				
		String sentenciaEjecutar="SELECT * FROM TIPO_DOC WHERE id_tipo_doc = " + idTipo;
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
		if(resultadoBusqueda.next()){
			TipoDocDTO tipo = new TipoDocDTO ();
			tipo.idTipoDoc = resultadoBusqueda.getInt(1);
			tipo.tipoDoc = resultadoBusqueda.getString(2);
			return tipo;
		}  
	        
	     return null;   		
	}
		

	public int buscarIdTipoDoc(String tipoDoc) throws SQLException {
		
		String sentenciaEjecutar="SELECT * FROM tipo_doc WHERE tipo_doc = '"+tipoDoc+"'";
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	    if(resultadoBusqueda.next())
	        return resultadoBusqueda.getInt(1);
	    else return 0;
	}

	public String buscarTipoDoc(int idtipoDoc) throws SQLException {
		String sentenciaEjecutar="SELECT * FROM tipo_doc WHERE id_tipo_doc = "+idtipoDoc+"";
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	    if(resultadoBusqueda.next())
	        return resultadoBusqueda.getString(2);
	    else return "0";
	}
			
	public int buscarIdCiudad(String ciudad) throws SQLException {
		String sentenciaEjecutar="SELECT * FROM ciudad WHERE nombre_ciudad = '"+ciudad+"'";
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	    if(resultadoBusqueda.next())
	        return resultadoBusqueda.getInt(1);
	    else return 0;
	}

	public int buscarIdIva(String condFrenteIVA) throws SQLException {
		String sentenciaEjecutar="SELECT * FROM cond_frente_iva WHERE nombre_condicion_iva = '"+condFrenteIVA+"'";
	    ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
	    if(resultadoBusqueda.next())
	        return resultadoBusqueda.getInt(1);
	    else return 0;
	}

	public void agregarPasajero(Pasajero nuevoPasajero) {
			
			
	}

	
	public void guardar(Pasajero p) {
		
		PreparedStatement insertar2;
		
		try{
			insertar2 = conexion.conn.prepareStatement("INSERT INTO persona(id_cond_frente_iva,id_ciudad,e_mail,telefono,calle, numero, piso, departamento, cp, nacionalidad,cuit,ocupacion) values(?,?,?,?,?,?,?,?,?,?,?,?)");
			insertar2.setInt(1, p.getIVA().getIdIVA());
			insertar2.setInt(2, p.getCiudad().getId_Ciudad());
			insertar2.setString(3, p.getE_mail());
			insertar2.setString(4, p.getTelefono());
			insertar2.setString(5, p.getCalle());
			insertar2.setInt(6, p.getNumero());
			insertar2.setInt(7, p.getPiso());
			insertar2.setString(8, p.getDepartamento());
			insertar2.setInt(9, p.getCp());
			insertar2.setString(10, p.getNacionalidad());
			insertar2.setString(11, p.getCuit());
			insertar2.setString(12, p.getOcupacion());
			insertar2.executeUpdate();
			
		}
		catch (SQLException e){
			e.printStackTrace();
			
		}
			
		try{
			int ultimo = 0;
			ResultSet rs = conexion.getQuery("SELECT max(id_persona) FROM persona");
			if(rs.next()){
				ultimo = rs.getInt(1);
			}
			
			PreparedStatement insertar;
			
			insertar = conexion.conn.prepareStatement("INSERT INTO pasajero(id_persona, id_tipo_doc,apellido,nombre,fechaNac,nro_doc) "
						+ "values(?,?,?,?,?,?)");
			insertar.setInt(1, ultimo);
			insertar.setInt(2, p.getTipoDoc().getIdTipo());
			insertar.setString(3, p.getApellido());
			insertar.setString(4, p.getNombre());
			SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
			insertar.setString(5, formato.format((p.getFechaNac())));
			insertar.setString(6, p.getNroDoc());
			insertar.executeUpdate();
			
		}
		catch (SQLException e){
			e.printStackTrace();
			
		}
		
	}
		
	
		public boolean existeDocumento(int tipoDoc, String numDoc) throws SQLException {
			String sentenciaEjecutar="SELECT * FROM pasajero WHERE id_tipo_doc="+tipoDoc+" AND nro_doc='"+numDoc+"'";
			ResultSet resultadoBusqueda = conexion.getQuery(sentenciaEjecutar);
		    if(resultadoBusqueda.next())
		        return true;
		    else return false;
		}
		

		//BUSCA EL OBJETO TIPO DOC

		public TipoDoc getTipoDoc(int idTipoDoc) throws SQLException {
			ResultSet rs = conexion.getQuery("SELECT * FROM tipo_doc WHERE id_tipo_doc="+ idTipoDoc);
			Vector<TipoDoc> retorno = new Vector<TipoDoc>();
			while(rs.next()){
			TipoDoc tipoDoc = new TipoDoc(rs.getInt(1), rs.getString(2));
			retorno.add(tipoDoc);
			}
			return retorno.get(0);
		}

		
		//BUSCA EL OBJETO CONDICION FRENTE IVA
		
		public IVA getIVA(int idIva) throws SQLException {
			ResultSet rs = conexion.getQuery("SELECT * FROM cond_frente_iva WHERE id_cond_frente_iva="+ idIva);
			Vector<IVA> retorno = new Vector<IVA>();
			while(rs.next()){
			IVA iva = new IVA(rs.getInt(1), rs.getString(2));
			retorno.add(iva);
			}
			return retorno.get(0);
		}
		
		//BUSCAR PASAJERO
		
		public static Pasajero buscarPasajero (String apellido, String nombre, int tipoDoc, String numDoc) throws SQLException, ClassNotFoundException {
			
			ResultSet resultadoBusqueda;
			resultadoBusqueda=conexion.getQuery("SELECT * FROM pasajero WHERE apellido ='" +apellido+ "' "
					+ "AND nombre = '"+nombre+"' AND id_tipo_doc = "+tipoDoc+" AND  num_doc= '"+numDoc+"'");
				
			ArrayList <Pasajero> listaAux = new ArrayList <Pasajero> ();
			while(resultadoBusqueda.next()){
		        Pasajero pasajero = new Pasajero();
	                
		        listaAux.add(pasajero);
		    }
			return listaAux.get(0);
		}
		
		//BUSCAR RESPONSABLE

		public Obtiene buscarResponsable(PasajeroDTO pasajeroDTO) throws SQLException {
			
			ResultSet resultadoBusqueda;
			resultadoBusqueda=conexion.getQuery("SELECT * FROM obtiene OB, pasajero PA WHERE PA.id_persona=OB.id_persona");
				
			ArrayList <Obtiene> listaAux = new ArrayList <Obtiene> ();
			while(resultadoBusqueda.next()){
		        Obtiene o = new Obtiene();
	                
		        listaAux.add(o);
		    }
			return listaAux.get(0);
		}

}



